home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Libris Britannia 4
/
science library(b).zip
/
science library(b)
/
PACKET
/
PMPSRC11.ZIP
/
PMP.H
< prev
next >
Wrap
Text File
|
1991-07-30
|
12KB
|
363 lines
/*
PMP.H -- Main header file
Poor Man's Packet (PMP)
Copyright (c) 1991 by Andrew C. Payne All Rights Reserved.
Permission to use, copy, modify, and distribute this software and its
documentation without fee for NON-COMMERCIAL AMATEUR RADIO USE ONLY is hereby
granted, provided that the above copyright notice appear in all copies.
The author makes no representations about the suitability of this software
for any purpose. It is provided "as is" without express or implied warranty.
Andrew C. Payne
August, 1989
*/
#include "types.h"
#include "dqueue.h"
/* ----- Defines ----- */
#define NETROM /* include Net/Rom code */
/* #define TRACE include trace/log code */
#define DEBUG /* include debug code */
#define REMOTE /* include remote commands */
#define VERSION "1.1" /* PMP Version Number */
#define TRUE 1
#define FALSE 0
#define FAIL -1
#define MAXDIGIS 7 /* max digipeaters in path */
#define MAXCLEN 6 /* # of characters in callsign */
#define malloc(x) farmalloc(x)
/* ----- Screen colors ----- */
#define normal() (textattr(NormalAttr))
#define bright() (textattr(BrightAttr))
#define inverse() (textattr(InvAttr))
/* ----- Timing Stuff ----- */
#define BITTIME 1988 /* 1200 baud bit time in Counter #0 ticks */
#define MILLISEC 1193 /* 1 millisecond */
#define BITSPERTICK 66 /* 66 bits per BIOS tick */
/* ----- BIOS Time Stuff ----- */
#define BiosTime() ((long)biostime(0,0)) /* reads the bios timer */
#define BIOSSEC 18 /* tics per second */
/* ----- Control field stuff ----- */
#define I 0x00 /* Information */
#define S 0x01 /* Supervisory */
#define RR 0x01 /* Receiver ready */
#define RNR 0x05 /* Receiver not ready */
#define REJ 0x09 /* Reject */
#define U 0x03 /* unnumbered frames */
#define SABM 0x2f /* Connect request */
#define DISC 0x43 /* Disconnect */
#define DM 0x0f /* disconnected mode */
#define UA 0x63 /* unnumbered acknowledge */
#define FRMR 0x87 /* frame reject */
#define UI 0x03 /* unnumbered information */
#define PF 0x10 /* poll/final bit */
/* ----- Command bit ----- */
#define UNKNOWN 0 /* pre-AX.25 level 2 */
#define COMMAND 1
#define RESPONSE 2
/* ----- Bit masks ----- */
#define SSIDMASK 0x1e /* mask for SSID nibble */
#define REPEATED 0x80 /* has been repeated bit */
/* ----- AX.25 Level 3 Protocol ID bytes ----- */
#define PID_NETROM 0xcf /* NET/ROM */
#define PID_TEXT 0xf0 /* no Level 3 */
/* ----- Global Structures ----- */
struct ax25_level1 { /* Level 1 packet */
int len; /* number of bytes */
byte data[1]; /* zero or more data bytes */
};
struct ax25_addr { /* AX.25 address */
byte call[MAXCLEN]; /* Callsign, shifted left one bit */
byte ssid; /* sub-station ID field */
};
struct ax25_packet { /* Internal representation of packets */
struct ax25_addr dest; /* destination */
struct ax25_addr source; /* source */
struct ax25_addr digis[MAXDIGIS];
char repeated[MAXDIGIS]; /* has been repeated */
int ndigis;
byte cmdresp; /* command/response bit */
byte cont; /* control byte */
byte pid; /* protocol ID */
int dlen; /* data length */
byte data[1]; /* data bytes */
};
struct ax25_con { /* link control block */
struct ax25_packet header; /* default packet */
int state; /* state of this link */
int vs; /* send sequence */
int vr; /* receive sequence */
int tqs; /* transmit queue seq */
long t1; /* T1 Timeout */
long t2; /* T2 Timeout */
long t3; /* T3 Timeout */
int unack; /* # of unacked packets */
int qsize; /* # of packets in queue */
byte response; /* enqueued response */
byte dreason; /* reason for disconnect */
byte proto; /* protocol version */
int retries; /* current number of retries */
int remotebusy; /* TRUE of got RNR */
DQUEUE dq; /* outgoing data queue */
char type; /* lins type (binary, text) */
};
struct param_cmd { /* command dispatch table */
char *cmd; /* command */
int (*handler)(char *s); /* parameter line */
};
/* ----- Connection States ----- */
#define DISCONNECTED 0 /* disconnected mode */
#define SETUP 1 /* link setup */
#define DISCONNECTPEND 2 /* pending disconnect */
#define CONNECTED 3 /* link connected */
#define RECOVERY 4 /* link recovery */
/* ----- Protocol Versions ----- */
#define V1 1
#define V2 2
/* ----- Disconnect Reasons ----- */
#define DISC_LOCAL 1 /* local initiated, normal disconnect */
#define DISC_REMOTE 2 /* remote initiated, normal disconnect */
#define DISC_TIMEOUT 3 /* excessive retries */
#define DISC_BUSY 4 /* remote busy (attempted connect) */
/* ----- Line Termination Conventions ----- */
#define EOL_CR 1 /* lines terminate with CR */
#define EOL_LF 2 /* lines terminate with LF */
#define EOL_CRLF 3 /* lines terminate with CR/LF */
/* ----- Link Types ------ */
#define BINARY 1 /* binary stream */
#define TEXT 2 /* text stream */
/* ----- Global Variables ----- */
#ifndef EXTERN
#define EXTERN extern
#endif
#define MAXCTEXTS 5 /* maximum CTEXT lines */
EXTERN int CallLength; /* length of callsign string */
/* ----- Timing Parameters ----- */
EXTERN int TXStartFlags; /* number of opening SYNCs on each TX */
EXTERN int TXEndFlags; /* number of SYNCS at end of packet*/
EXTERN int Frack; /* timeout (seconds) */
EXTERN int Check; /* keep-alive (seconds) */
EXTERN int BeaconInt; /* beacon interval (seconds) */
EXTERN int Ppersist; /* p-persistence parameter */
EXTERN int Slottime; /* slot wait time */
EXTERN long Pwait; /* P-persist timeout */
EXTERN int Retry; /* maximum number of retries */
EXTERN struct ax25_addr MyCall; /* user's callsign */
EXTERN struct ax25_con AX25_Control;
EXTERN long SoundEnd; /* ending time of a sound */
EXTERN long BeaconEnd; /* time for next beacon */
EXTERN long Pwait; /* P-persist timeout */
/* ----- User Parameters ----- */
EXTERN int DebugMode; /* TRUE if in debug mode */
EXTERN int PassMode; /* TRUE if in PassAll mode */
EXTERN int Sound; /* TRUE if sound is enabled */
EXTERN int Pthresh; /* I-frame threshhold */
EXTERN char *ctext[MAXCTEXTS]; /* connect message lines */
EXTERN int nctexts; /* number of CTEXT lines */
EXTERN char *btext; /* beacon/CQ message */
EXTERN char *baddr; /* destination/path of beacons */
EXTERN int MaxFrame; /* max outstanding frames */
EXTERN int Paclen; /* max packet size */
EXTERN int Ppersist; /* p-persistence parameter */
EXTERN int Slottime; /* slot wait time */
EXTERN int AutoWrap; /* word wrap column */
EXTERN char CaptureFile[40]; /* current capture filename */
EXTERN long CaptureSize; /* bytes in current capture file */
EXTERN long CaptureBuffer; /* size of capture buffer */
EXTERN KEY fkeys[10][80]; /* function key definitions */
EXTERN char ParamFname[40]; /* parameter file name */
EXTERN int AutoMode; /* automatic mode */
EXTERN int ClockSkew; /* attempt clock adjust */
/* ----- Counters ----- */
EXTERN long RXCount; /* number of good frames received */
EXTERN long RXQOverflow; /* number of RX Queue overflows */
EXTERN long RXBOverflow; /* number of RX Buffer overflows */
EXTERN long RXFrameErr; /* number of framing errors received */
EXTERN long RXCRCErr; /* number of CRC error received */
EXTERN long RXFRMR; /* number of FRMR frames received */
EXTERN long RXREJ; /* number of REJ frames received */
EXTERN long TXCount; /* number of frames transmitted */
EXTERN long StartTime; /* startup time */
/* ----- Screen Parameters ----- */
EXTERN int monochrome; /* TRUE if monochrome screen */
EXTERN int NormalAttr; /* normal attribute */
EXTERN int InvAttr; /* inverse attrubute */
EXTERN int BrightAttr; /* bright attribute */
EXTERN int StatusAttr; /* status line attribute */
EXTERN int MsgAttr; /* message attribute */
/* ----- Function Prototypes ----- */
/* ax25dump.c */
extern void ShowLevel2(struct ax25_packet *p2);
extern char *DumpLevel2(struct ax25_packet *p2);
/* ax25lapb.c */
extern int Connected(void);
extern void AX25_Init(void);
extern void AX25_Flush(void);
extern void AX25_Incoming(struct ax25_packet *p2);
extern void AX25_Open(void);
extern void AX25_Close(void);
extern void AX25_Expire(int n);
extern int LinkSend(byte *p, int l);
extern int AX25QFull(void);
/* ax25subr.c */
extern int SetAX25Addr(struct ax25_addr *a, char *s);
extern char *GetAX25Addr(struct ax25_addr *p);
extern int CompAX25Addr(struct ax25_addr *a1, struct ax25_addr *a2);
extern int FrameType(byte c);
extern int CmdResp(struct ax25_level1 *p);
extern int SetAX25Path(char *s, struct ax25_packet *a);
extern char *GetAX25Path(struct ax25_packet *p);
extern struct ax25_packet *AX25L1toL2(struct ax25_level1 *p);
extern int SendAX25(struct ax25_packet *p);
extern void ReversePath(struct ax25_packet *p1, struct ax25_packet *p2);
extern void SendBeacon(void);
extern void StartBeacon(void);
extern void SendWelcome(void);
/* capture.c */
extern void InitCapture(void);
extern void FlushCapture(void);
extern void Capture(char *s, int len);
extern void OpenCapture(char *fname);
extern void CloseCapture(void);
extern int Capturing(void);
/* console.c */
extern void curon(void);
extern void curoff(void);
extern int cursave(void);
extern void currest(int i);
extern void putstring(int x, int y, int len, byte attr, char *s);
extern void clear_area(int line, int start, int end);
extern void CRTInit(void);
extern void CRTExit(void);
extern int StartScrollback(void);
extern void EndScrollback(void);
extern int MoveScrollback(int n);
extern void WriteScrollback(char *fname);
extern void GotoLeft(void);
extern void ShowData(byte *s, int l);
extern void uprintf(byte attr, char *format, ...);
extern void uputs(byte attr, char *s);
extern void _uputs(byte attr, char *s);
extern void uputtext(byte attr, byte *s, int l);
extern void SaveScreen(int f, int border);
extern void RestoreScreen(void);
extern void CenterTitle(int line, char *t);
extern void GotoXY(int x, int y);
extern void StatusLine(void);
extern void ShowTXRX(int tx, int rx);
extern void NotifyStatus(int old, int new);
extern void Pause(int delay);
extern void Notify(char *s);
extern void SaveMessage(void);
extern void RestoreMessage(void);
extern int GetInput(char *prompt, char *s, int len);
/* heard.c */
extern void HeardInit(void);
extern void Heard(struct ax25_packet *p);
extern void DoHeard(void);
/* keys.c */
extern KEY Nextkey(void);
extern void AddKeystrokes(KEY *s);
extern void InitKeybuffer(void);
extern int convertkey(KEY *dest, char *src);
/* level1rx.c */
extern int RXCarrier(void);
extern int RXLevel1(void);
extern void RXProcess(void);
extern void RXInit(void);
/* level2rx.c */
extern void AX25Level2(struct ax25_level1 *p);
/* level1tx.c */
extern void ClockAdjust(int bitcount);
extern void TXKey(int state);
extern int CRCCheck(struct ax25_level1 *p);
extern void TXQInit(void);
extern int TXQAdd(struct ax25_level1 *packet);
extern void TXQEmpty(void);
extern int TXQBytesInQ(void);
/* level2tx.c */
extern int SendAX25(struct ax25_packet *p);
/* misc.c */
extern char *sob(char *s);
extern char *extract(char *s, char *p);
extern int convert(char *dest, char *src);
extern int dispatch(char *s, struct param_cmd *pcmds);
extern void trim(char *s);
extern void eol_out(int conv, char *src, int len);
extern void eol_in(int conv, char *src, int len);
/* param.c */
extern void InitParameters(void);
extern int ReadParameters(void);
extern char *extract(char *s, char *p);
/* pmp.c */
extern void PeriodicHook(void);
extern void StartSound(int freq, int len);
extern void Pause(int delay);
extern void OutOfMemory(void);
/* trace.c */
extern void LogInit(void);
extern void LogPacket(struct ax25_level1 *p, int dir);
extern void DumpLog(void);
#ifdef REMOTE
/* remote.c */
extern void command(char *s);
#endif